/*
题目背景
由于你的帮助，火星只遭受了最小的损失。但 gw 懒得重建家园了，就造了一艘飞船飞向遥远的 earth 星。不过飞船飞到一半，gw 发现了一个很严重的问题：肚子饿了 ~。
gw 还是会做饭的，于是拿出了储藏的食物准备填饱肚子。gw 希望能在 T 时间内做出最美味的食物，但是这些食物美味程度的计算方式比较奇葩，于是绝望的 gw 只好求助于你了。
题目描述
一共有 n 件食材，每件食材有三个属性，ai，bi和 ci，如果在 t 时刻完成第 i 样食材则得到 ai−t×bi的美味指数，用第 i 件食材做饭要花去 ci的时间。
众所周知，gw 的厨艺不怎么样，所以他需要你设计烹调方案使得美味指数最大。
输入格式
第一行是两个正整数 T 和 n，表示到达地球所需时间和食材个数。
下面一行 n 个整数，ai；
下面一行 n 个整数，bi；
下面一行 n 个整数，ci。
输出格式
输出最大美味指数。
*/
#include<bits/stdc++.h>
#define endl "\n"
#define ll long long
#define all(rq) rq.begin(),rq.end()
#define max(a,b) (a<b?b:a)
#define min(a,b) (a<b?a:b)

using namespace std;
const int INF=0x3f3f3f3f;
class food{
public:
	int a,b,c;
	
	food(int a,int b,int c):a(a),b(b),c(c){
	}
	
	food(){
	}
	
	bool operator<(const food&other) const{
		return b*other.c>other.b*c;
	}
};
int main(){
	ll t,n;
	cin>>t>>n;
	vector<food> a(n); //遇到多参数的动态规划问题 能算代价算代价 能算收益算收益
	for(ll i=0;i<n;i++){
		ll a1;
		cin>>a1;
		a[i].a=a1;
	}
	for(ll i=0;i<n;i++){
		ll b;
		cin>>b;
		a[i].b=b;
	}
	
	for(ll i=0;i<n;i++){
		ll c;
		cin>>c;
		a[i].c=c;
	}
	
	sort(a.begin(),a.end());
	vector<ll> f(t+1);
	for(ll i=0;i<n;i++){
		vector<ll> temp=f;
		
		for(ll j=a[i].c;j<=t;j++){
			f[j]=max(temp[j-a[i].c]+a[i].a-j*a[i].b,temp[j]);
			f[j]=max(f[j-1],f[j]);
		}
	}
	
	cout<<f[t]<<endl;
	return 0;
}